package com.inkFlow.crawl.core.util;


import com.inkFlow.common.core.utils.StringUtils;
import us.codecraft.webmagic.Page;

import java.util.List;

/**
 * @Description: 规则解析器
 * @author: dingshuai
 * @date: 2025-08-15 10:37:50
 **/
public class AnalyzeRuleUtil {

    /**
     * 解析页面 并返回one
     * @param page
     * @param rule
     * @return
     */
    public static String analyzeOne(Page page, String rule) {
        if (rule.startsWith("@XPath:")) {
            return page.getHtml().xpath(rule.substring(7)).get();
        } else if (rule.startsWith("@Regex:")) {
            return page.getHtml().regex(rule.substring(7)).get();
        }
        return null;
    }
    /**
     * 解析页面 并返回all
     * @param page
     * @param rule
     * @return
     */
    public static List<String> analyzeAll(Page page, String rule) {
        if (rule.startsWith("@XPath:")) {
            return page.getHtml().xpath(rule.substring(7)).all();
        } else if (rule.startsWith("@Regex:")) {
            return page.getHtml().regex(rule.substring(7)).all();
        }
        return null;
    }
    /**
     * 解析页面link 并返回one
     * @param page
     * @param rule
     * @return
     */
    public static String analyzeOneLink(Page page, String rule) {
        if (rule.startsWith("@XPath:")) {
            return page.getHtml().xpath(rule.substring(7)).links().get();
        } else if (rule.startsWith("@Regex:")) {
            return page.getHtml().regex(rule.substring(7)).links().get();
        }
        return null;
    }
    /**
     * 解析页面links 并返回all
     * @param page
     * @param rule
     * @return
     */
    public static List<String> analyzeAllLinks(Page page, String rule) {
        if (rule.startsWith("@XPath:")) {
            return page.getHtml().xpath(rule.substring(7)).links().all();
        } else if (rule.startsWith("@Regex:")) {
            return page.getHtml().regex(rule.substring(7)).links().all();
        }
        return null;
    }
    /**
     * 小说正文替换
     * @param content
     * @param rule
     * @return
     */
    public static String replace(String content, String rule) {
        if (StringUtils.isBlank(content) || StringUtils.isBlank(rule)) {
            return content;
        }
        String[] split = rule.split("\\|");
        for (String s : split) {
            content = content.replace(s,"");
        }
        return content;
    }

}
